package com.mi.filter;


import com.mi.util.UUIDUtil;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

@WebFilter(filterName = "test", urlPatterns = "/*")
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=utf-8");
        filterChain.doFilter(servletRequest,servletResponse);
        if(request.getRequestURL().toString().contains(".docx")||request.getRequestURL().toString().contains(".doc")){
            //1.设置文件ContentType类型，这样设置，会自动判断下载文件类型
            response.setContentType("multipart/form-data");
            //2.设置文件头：最后一个参数是设置下载文件名(假如我们叫a.pdf)
            response.setHeader("Content-Disposition", "attachment;fileName="+ UUIDUtil.getUUID() +".doc");
            ServletOutputStream out;
            //通过文件路径获得File对象(假如此路径中有一个download.pdf文件)
            File file = new File(File.separator+"root"+ File.separator + "static"+request.getRequestURL().substring(request.getRequestURL().lastIndexOf("resume")-1));
            try {
                FileInputStream inputStream = new FileInputStream(file);

                //3.通过response获取ServletOutputStream对象(out)
                out = response.getOutputStream();

                int b = 0;
                byte[] buffer = new byte[512];
                while (b != -1){
                    b = inputStream.read(buffer);
                    //4.写到输出流(out)中
                    out.write(buffer,0,b);
                }
                inputStream.close();
                out.close();
                out.flush();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
